#include "pwm.h"
#include "gpio.h"

// 得到一个1000Hz - 2000Hz的方波
void hal_pwm_init(void)
{
	// 1. 设置GPIOC14引脚为PWM功能 
	hal_gpio_init(GPIOC, GPIO_PIN_14, ALT2);	
	// 2. 设置PCLK时钟源的一级分频值  TCFG0[15:8] 
	// 150 000 000 / (249+1) = 60 0000Hz 
	PWM->TCFG0 &= (~(0xFF << 8));
	PWM->TCFG0 |= (249 << 8);
	// 3. 设置PCLK时钟源的二级分频值  TCFG1[11:8]
	// 60 0000 / 2 = 30 0000Hz
	PWM->TCFG1 &= (~(0xF << 8));
	PWM->TCFG1 |= (0x1 << 8);
}

void hal_pwm_on(void)
{
	// 4. 给TCNTB2寄存器赋初始值 决定了PWM方波的周期
	// 可以看成进行三级分频
	// 30 0000 / (299 + 1) = 1000Hz 
	// PWM->TCNTB2 = 300-1;
	PWM->TCNTB2 = 150-1;
	
	// 5. 给TCMPB2寄存器赋初始值 决定了PWM方波的占空比
	PWM->TCMPB2 = 50-1;

	// 6. 打开PWM翻转功能   TCON[14]
	PWM->TCON |= (0x1 << 14);

	// 7. 打开手动更新位    TCON[13]
	PWM->TCON |= (0x1 << 13);

	// 8. 打开自动更新位    TCON[15]
	PWM->TCON |= (0x1 << 15);

	// 9. 关闭手动更新位    TCON[13]
	PWM->TCON &= (~(0x1 << 13));

	// 10. 打开Timer2       TCON[12]
	PWM->TCON |= (0x1 << 12);
}

void hal_pwm_off(void)
{
	// 8. 关闭自动更新位    TCON[15]
	PWM->TCON &= (~(0x1 << 15));
	// 9. 关闭手动更新位    TCON[13]
	PWM->TCON &= (~(0x1 << 13));
	// 10. 关闭Timer2       TCON[12]
	PWM->TCON &= (~(0x1 << 12));
	// 设置GPIOC14为GPIO功能, 输出模式,输出低电平
	//
}

